package com.otv.managed.bean;

import java.io.Serializable;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import org.springframework.dao.DataAccessException;

import com.otv.alojamiento.service.IAlojamientoService;
import com.otv.arriendo.service.IArriendoService;
import com.otv.model.Alojamiento;
import com.otv.model.Arriendo;
import com.otv.model.Cliente;
import com.otv.model.Pieza;
import com.otv.pieza.service.IPiezaService;


@ManagedBean(name="arriendoMB")
@RequestScoped
public class ArriendoManagedBean implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -8060932486267012174L;
	private static final String SUCCESS = "success";
	private static final String ERROR   = "error";
	
	//Spring Service is injected...
	@ManagedProperty(value="#{ArriendoService}")
	IArriendoService arriendoService;
	@ManagedProperty(value="#{AlojamientoService}")
	IAlojamientoService alojamientoService;
	@ManagedProperty(value="#{PiezaService}")
	IPiezaService piezaService;
	
	List<Arriendo> arriendoList;
	List<Alojamiento> alojamientoList;
	List<Pieza> piezaList;
	
	private int id;
	private int alojamiento;
	private int pieza;
	private Cliente cliente;
	private Double abono;
//	private String desde;
	private Date desde;
	private Date hasta;
//	private String hasta;
	private Date horaInicio;
	private Date horaTermino;
	private String descripcion;


	public Cliente clienteDevuelto () {
		Cliente a = new Cliente();
		a.setId(0);
		return a;
	}
	

	public String addArriendo () {
		try {
			Arriendo arriendo = new Arriendo();
			arriendo.setId(getId());
			arriendo.setAlojamiento(alojamientoService.getAlojamientoById(getAlojamiento()));
			arriendo.setPieza(piezaService.getPiezaById(getPieza()));
			
			//arriendo.setCliente(getCliente());  se debe descomentar por que es el origianl
			arriendo.setCliente(this.clienteDevuelto());
			arriendo.setAbono(getAbono());
			arriendo.setDesde(getDesde());
			arriendo.setHasta(getHasta());
			Format formatter = new SimpleDateFormat("HH:mm");
			arriendo.setHoraInicio(formatter.format(getHoraInicio()));
			arriendo.setHoraTermino(formatter.format(getHoraTermino()));
			arriendo.setDescripcion(getDescripcion());
			
			getArriendoService().addArriendo(arriendo);

			return SUCCESS;
		} catch (DataAccessException e) {
			e.printStackTrace();
		} 	
		
		return ERROR;
	}
	
	/**
	 * Reset Fields
	 * 
	 */
	public void reset() {
		this.setId(0);
		
		setAlojamiento(0);
		setPieza(0);
		setCliente(null);
		setAbono(0.0);
		setDesde(null);
		setHasta(null);
		setHoraInicio(null);
		setHoraTermino(null);
		setDescripcion("");	
	}

	


	public IPiezaService getPiezaService() {
		return piezaService;
	}


	public void setPiezaService(IPiezaService piezaService) {
		this.piezaService = piezaService;
	}


	public List<Pieza> getPiezaList() {
		return piezaService.getPiezas();
	}


	public void setPiezaList(List<Pieza> piezaList) {
		this.piezaList = piezaList;
	}


	public IAlojamientoService getAlojamientoService() {
		return alojamientoService;
	}


	public void setAlojamientoService(IAlojamientoService alojamientoService) {
		this.alojamientoService = alojamientoService;
	}


	public List<Alojamiento> getAlojamientoList() {
		return alojamientoService.getAlojamientos();
	}


	public void setAlojamientoList(List<Alojamiento> alojamientoList) {
		this.alojamientoList = alojamientoList;
	}


	public IArriendoService getArriendoService() {
		return arriendoService;
	}

	public void setArriendoService(IArriendoService arriendoService) {
		this.arriendoService = arriendoService;
	}

	public List<Arriendo> getArriendoList() {
		this.arriendoList = new ArrayList<Arriendo>();
		this.arriendoList.addAll(this.getArriendoService().getArriendos());
		return arriendoList;
	}

	public void setArriendoList(List<Arriendo> arriendoList) {
		this.arriendoList = arriendoList;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}



	public int getPieza() {
		return pieza;
	}


	public void setPieza(int pieza) {
		this.pieza = pieza;
	}




	public int getAlojamiento() {
		return alojamiento;
	}


	public void setAlojamiento(int alojamiento) {
		this.alojamiento = alojamiento;
	}


	public Cliente getCliente() {
		return cliente;
	}


	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}


	public Double getAbono() {
		return abono;
	}

	public void setAbono(Double abono) {
		this.abono = abono;
	}


	public Date getDesde() {
		return desde;
	}


	public void setDesde(Date desde) {
		this.desde = desde;
	}


	public Date getHasta() {
		return hasta;
	}


	public void setHasta(Date hasta) {
		this.hasta = hasta;
	}


	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public Date getHoraInicio() {
		return horaInicio;
	}

	public void setHoraInicio(Date horaInicio) {
		this.horaInicio = horaInicio;
	}

	public Date getHoraTermino() {
		return horaTermino;
	}

	public void setHoraTermino(Date horaTermino) {
		this.horaTermino = horaTermino;
	}

	
	
	
}